package jp.sinmetal.trainer.util;

import jp.sinmetal.trainer.exception.TwitterRuntimeException;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
import twitter4j.http.AccessToken;
import twitter4j.http.RequestToken;

/**
 * TwitterAPIに関するUtil
 * @author sin
 *
 */
public class TwitterUtil {
	/**
	 * ConsumerKey
	 * @author sin
	 */
	private static final String CONSUMER_KEY = "HOGE";
	/**
	 * ConsumerSecret
	 * @author sin
	 */
	private static final String CONSUMER_SECRET = "HOGE";

	/**
	 * Twitter
	 * @author sin
	 */
	private Twitter twitter;

	/**
	 * コンストラクタ
	 * @author sin
	 */
	public TwitterUtil() {
		twitter = new TwitterFactory().getInstance();
		twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
	}

	/**
	 * アクセストークン取得
	 * @author sin
	 *
	 * @return
	 */
	public AccessToken getOAuthAccessToken() {
		try {
			return twitter.getOAuthAccessToken();
		} catch (TwitterException e) {
			throw new TwitterRuntimeException(e);
		}
	}

	/**
	 * アクセストークン取得
	 *
	 * @param requestToken
	 * @return
	 */
	public AccessToken getOAuthAccessToken(RequestToken requestToken) {
		try {
			return twitter.getOAuthAccessToken(requestToken);
		} catch (TwitterException e) {
			throw new TwitterRuntimeException(e);
		}
	}

	/**
	 * アクセストークン設定
	 * @author sin
	 *
	 * @param token
	 * @param tokenSecret
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public void setOAuthAccessToken(String token, String tokenSecret) {
		twitter.setOAuthAccessToken(new AccessToken(token, tokenSecret));
	}

	/**
	 * User取得
	 * @author sin
	 *
	 * @return
	 */
	public User getUser() {
		try {
			return twitter.verifyCredentials();
		} catch (TwitterException e) {
			throw new TwitterRuntimeException(e);
		}
	}

	/**
	 * リクエストトークン作成
	 * @author sin
	 *
	 * @return
	 */
	public static RequestToken createRequestToken() {
		Twitter twitter = new TwitterFactory().getOAuthAuthorizedInstance(CONSUMER_KEY, CONSUMER_SECRET);
		try {
			return twitter.getOAuthRequestToken();
		} catch (TwitterException e) {
			throw new TwitterRuntimeException(e);
		}
	}

}
